home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / src / RBF_src.lha / RBFNode.cpp < prev   
C/C++ Source or Header  |  1999-02-16  |  1KB  |  105 lines

  1. #include <RBF.h>
  2.  
  3. RBFNode::RBFNode()
  4. {
  5.    d = 0;
  6. }
  7.  
  8. RBFNode::RBFNode(int d0)
  9. {
  10.    d = d0;
  11.    C = new float [d];
  12.    R = new float [d];
  13. }
  14.  
  15. void RBFNode::Init(int d0)
  16. {
  17.    if (d==0) {
  18.       d = d0;
  19.       C = new float [d];
  20.       R = new float [d];
  21.    }
  22. }
  23.  
  24.  
  25.  
  26. RBFNode::~RBFNode()
  27. {
  28.    if (C)
  29.       delete [] C;
  30.    if (R)
  31.       delete [] R;
  32. }
  33.  
  34. void RBFNode::SetCR(int i, float c, float r)
  35. {
  36. //   printf("Setting to %d: %f,%f\n",i,c,r);
  37.    assert(i<d);
  38.    if (i<d) {
  39.       C[i] = c;
  40.       R[i] = r;
  41.    }
  42. }
  43.  
  44. void RBFNode::ShowStats(void)
  45. {
  46.    int i;
  47.  
  48.    printf("C = (");
  49.    for (i=0; i<d; i++) {
  50.       if (i>0)
  51.          printf(" ,");
  52.       printf("%f",C[i]);
  53.    }
  54.    printf(")\n R = (");
  55.    for (i=0; i<d; i++) {
  56.       if (i>0)
  57.          printf(" ,");
  58.       printf("%f",R[i]);
  59.    }
  60.    printf(")\n");
  61. }
  62.  
  63. float RBFNode::Distance(float *X)
  64. {
  65.    int i;
  66.    float dist = 0;
  67.    float d0;
  68.    for (i=0; i<d; i++, X++) {
  69.       d0 = (*X - C[i]);
  70.       dist+=d0*d0;
  71.    }
  72.    return dist;
  73. }
  74.  
  75. float RBFNode::Membership(float *X)
  76. {
  77.  
  78.    int i;
  79.    float dist = 0;
  80.    float d0;
  81.    for (i=0; i<d; i++, X++) {
  82.       //printf("R[%d]=%f\n",i,R[i]);
  83.       assert(R[i]!=0);
  84.       d0 = (*X - C[i]);
  85.  
  86.       if (R[i]>0) {
  87.          d0 = d0/R[i];
  88.       } else {
  89.          if (R[i]==-1)
  90.             { if (d0<0) {d0 = 0;} }
  91.          if (R[i]==-2)
  92.             { if (d0>0) {d0 = 0;} }
  93.       }
  94.  
  95.       dist+=d0*d0;
  96.  
  97.    }
  98.  
  99.    dist = (1 - dist);
  100.    if (dist<0)
  101.       dist=0;
  102.    return dist;
  103. }
  104.  
  105.